#include "drv_sht20.h"
#include "drv_iic.h"
#include "drv_systick.h"
#include "stdio.h"
tp  tem_hum_data;
/**************************************************
函数名称：drv_temperature_init

函数功能：IIC初始化

输入参数：无

输出参数：无

其它说明：
***************************************************/
void drv_sht20_init(void)
{
	drv_iic_init();
	drv_systick_ms(15);
}
/**************************************************
函数名称：drv_temperature_read

函数功能：读取temperature传感器的采集值

输入参数：无

输出参数：返回采集到的值

其它说明：
***************************************************/
uint16_t drv_temp_read(uint8_t method)
{
	uint8_t data[2];
	uint16_t ret=0;
	drv_iic_start();
	drv_iic_senddata(0x80); 
	if(drv_iic_waitACK() != ACK)
	{
		drv_iic_stop();
		return NACK;
	}
	if(method == 0)
	{
		drv_iic_senddata(0xe3);//获取温度
	}
	else	if(method == 1)
	{
		drv_iic_senddata(0xe5);//获取湿度
	}
	if(drv_iic_waitACK() != ACK)
	{
		drv_iic_stop();
		return NACK;
	}

	drv_iic_start();
	drv_iic_senddata(0x81);
	if(drv_iic_waitACK() != ACK)
	{
		drv_iic_stop();
		return NACK;
	}
	drv_systick_ms(85);
	data[0] = drv_iic_readdata(ACK);//高8位数据
	data[1] = drv_iic_readdata(NACK);//低8位数据
	drv_iic_stop();
	ret = ((data[0]<<8) | data[1]);
	return ret;
}
/**************************************************
函数名称：drv_temperature_reset

函数功能：复位temperature传感器

输入参数：无

输出参数：返回采集到的值

其它说明：
***************************************************/
uint8_t drv_temperature_reset(void)
{
	drv_iic_start();
	drv_iic_senddata(0x80);
	if(drv_iic_waitACK() != ACK)
	{
		drv_iic_stop();
		return NACK;
	}
	drv_iic_senddata(0xfe);//复位命令
	if(drv_iic_waitACK() != ACK)
	{
		drv_iic_stop();
		return NACK;
	}
	drv_iic_stop();
	return 0;
}
/**************************************************
函数名称：drv_temperature_getdata

函数功能：将传感器的采集值换算为实际值

输入参数：无

输出参数：换算后的实际值

其它说明：换算公式 实际值= -46.85+175.72*((float)采集值/65536)
***************************************************/
tp drv_temperature_getdata(void)
{
	uint16_t temp=0;
	temp = drv_temp_read(0);
	tem_hum_data.temp = -46.85+175.72*((float)temp/65536);
	//printf("Temperature=%.2f\r\n",tem_hum_data.temp);
	tem_hum_data.left_1=(uint16_t)tem_hum_data.temp/10;
	tem_hum_data.left_2=(uint16_t)tem_hum_data.temp%10;
	tem_hum_data.left_3=(uint16_t)((tem_hum_data.temp)*10)%10;
	tem_hum_data.left_4=(uint16_t)((tem_hum_data.temp)*100)%10;
	return tem_hum_data;
}
tp drv_humi_getdata(void)
{
	uint16_t temp=0;
	temp = drv_temp_read(1);
	tem_hum_data.temp = -6+125*((float)temp/65536);
	//printf("Temperature=%.2f\r\n",tem_hum_data.temp);
	tem_hum_data.left_1=(uint16_t)tem_hum_data.temp/10;
	tem_hum_data.left_2=(uint16_t)tem_hum_data.temp%10;
	tem_hum_data.left_3=(uint16_t)((tem_hum_data.temp)*10)%10;
	tem_hum_data.left_4=(uint16_t)((tem_hum_data.temp)*100)%10;
	return tem_hum_data;
}
